
/*!
 * \class CGasKineticScheme
 * \brief Class for setting up new method for spatial discretization of convective terms in flow Equations
 * \ingroup ConvDiscr
 * \author A. Lonkar
 * \version 5.0.0 "Raven"
 */
class CGasKineticScheme: public CNumerics {
private:
  
  /* define private variables here */
  bool implicit, grid_movement; 
  su2double kappa;
  su2double *Diff_U;
  su2double *Velocity_i, *Velocity_j, *RoeVelocity;
  su2double *ProjFlux_i, *ProjFlux_j;
  su2double *delta_wave, *delta_vel;
  su2double *Lambda, *Epsilon;
  su2double **P_Tensor, **invP_Tensor;
  su2double sq_vel, Proj_ModJac_Tensor_ij, Density_i, Energy_i, SoundSpeed_i, Pressure_i, Enthalpy_i,
  Density_j, Energy_j, SoundSpeed_j, Pressure_j, Enthalpy_j, R, RoeDensity, RoeEnthalpy, RoeSoundSpeed,
  ProjVelocity, ProjVelocity_i, ProjVelocity_j, proj_delta_vel, delta_p, delta_rho;

  su2double *MeanVelocity, 
            *PrimVar_i, *PrimVar_j,
            *Mean_PrimVar,
            **Mean_GradPrimVar, 
            *Proj_Mean_GradPrimVar_Edge,
            *Edge_Vector,
            sq_vel_i, sq_vel_j,
            RoeSoundSpeed2,
            MaxLambda,
            Delta,
            Mean_Laminar_Viscosity,         /*!< \brief Mean value of the laminar viscosity. */
            Mean_Eddy_Viscosity,         /*!< \brief Mean value of the eddy viscosity. */
            Mean_turb_ke,				 /*!< \brief Mean value of the turbulent kinetic energy. */
            dist_ij_2;

  unsigned short iDim, iVar, jVar, kVar;
  
public:
  
  /*!
   * \brief Constructor of the class.
   * \param[in] val_nDim - Number of dimensions of the problem.
   * \param[in] val_nVar - Number of variables of the problem.
   * \param[in] config - Definition of the particular problem.
   */
  CGasKineticScheme(unsigned short val_nDim, unsigned short val_nVar, CConfig *config);
  
  /*!
   * \brief Destructor of the class.
   */
  ~CGasKineticScheme(void);
  
  /*!
   * \brief Compute the Roe's flux between two nodes i and j.
   * \param[out] val_residual - Pointer to the total residual.
   * \param[out] val_Jacobian_i - Jacobian of the numerical method at node i (implicit computation).
   * \param[out] val_Jacobian_j - Jacobian of the numerical method at node j (implicit computation).
   * \param[in] config - Definition of the particular problem.
   */
  void ComputeResidual(su2double *val_residual, su2double **val_Jacobian_i, su2double **val_Jacobian_j, CConfig *config);
};


